home *** CD-ROM | disk | FTP | other *** search
- /*
- * This file is the general header file for
- * all parts of the MicroEMACS display editor. It contains
- * definitions used by everyone, and it contains the stuff
- * you have to edit to create a version of the editor for
- * a specific operating system and terminal.
- */
- #define V7 0 /* V7 UN*X or Coherent */
- #define VMS 0 /* VAX/VMS */
- #define CPM 0 /* CP/M-86 */
- #define ST 1
- #define ALCYON 1 /* Alcyon C compiler */
- #define MSDOS 0 /* MS-DOS */
-
- #define ANSI 0
- #define ADM3 0 /* [Kaypro] Lear Siegler */
- #define VT52 0 /* VT52 terminal (Zenith). */
- #define VT100 0 /* Handle VT100 style keypad. */
- #define LK201 0 /* Handle LK201 style keypad. */
- #define RAINBOW 0 /* Use Rainbow fast video. */
- #define TERMCAP 0 /* Use TERMCAP */
-
- #define CVMVAS 1 /* C-V, M-V arg. in screens. */
-
- #define NFILEN 80 /* # of bytes, file name */
- #define NBUFN 16 /* # of bytes, buffer name */
- #define NLINE 256 /* # of bytes, line */
- #define NKBDM 256 /* # of strokes, keyboard macro */
- #define NPAT 80 /* # of bytes, pattern */
- #define HUGE 1000 /* Huge number */
-
- #define AGRAVE 0x60 /* M- prefix, Grave (LK201) */
- #define METACH 0x1B /* M- prefix, Control-[, ESC */
- #define CTMECH 0x1C /* C-M- prefix, Control-\ */
- #define EXITCH 0x1D /* Exit level, Control-] */
- #define CTRLCH 0x1E /* C- prefix, Control-^ */
- #define HELPCH 0x1F /* Help key, Control-_ */
-
- #define CTRL 0x0100 /* Control flag, or'ed in */
- #define META 0x0200 /* Meta flag, or'ed in */
- #define CTLX 0x0400 /* ^X flag, or'ed in */
- #define SPEC 0x0800 /* Special scancode keys */
-
- #define MAYBE -1 /* Conditional based on query */
- #define FALSE 0 /* False, no, bad, etc. */
- #define TRUE 1 /* True, yes, good, etc. */
- #define ABORT 2 /* Death, ^G, abort, etc. */
-
- #define FIOSUC 0 /* File I/O, success. */
- #define FIOFNF 1 /* File I/O, file not found. */
- #define FIOEOF 2 /* File I/O, end of file. */
- #define FIOERR 3 /* File I/O, error. */
-
- #define CFCPCN 0x0001 /* Last command was C-P, C-N */
- #define CFKILL 0x0002 /* Last command was a kill */
-
- #define PRNRDY gemdos(0x11) /* LST: status for print buffer */
- /*
- * There is a window structure allocated for
- * every active display window. The windows are kept in a
- * big list, in top to bottom screen order, with the listhead at
- * "wheadp". Each window contains its own values of dot and mark.
- * The flag field contains some bits that are set by commands
- * to guide redisplay; although this is a bit of a compromise in
- * terms of decoupling, the full blown redisplay is just too
- * expensive to run for every input character.
- */
- typedef struct WINDOW {
- struct WINDOW *w_wndp; /* Next window */
- struct BUFFER *w_bufp; /* Buffer displayed in window */
- struct LINE *w_linep; /* Top line in the window */
- struct LINE *w_dotp; /* Line containing "." */
- short w_doto; /* Byte offset for "." */
- struct LINE *w_markp; /* Line containing "mark" */
- short w_marko; /* Byte offset for "mark" */
- char w_toprow; /* Origin 0 top row of window */
- char w_ntrows; /* # of rows of text in window */
- char w_force; /* If NZ, forcing row. */
- char w_flag; /* Flags. */
- } WINDOW;
-
- #define WFFORCE 0x01 /* Window needs forced reframe */
- #define WFMOVE 0x02 /* Movement from line to line */
- #define WFEDIT 0x04 /* Editing within a line */
- #define WFHARD 0x08 /* Better to a full display */
- #define WFMODE 0x10 /* Update mode line. */
-
- /*
- * Text is kept in buffers. A buffer header, described
- * below, exists for every buffer in the system. The buffers are
- * kept in a big list, so that commands that search for a buffer by
- * name can find the buffer header. There is a safe store for the
- * dot and mark in the header, but this is only valid if the buffer
- * is not being displayed (that is, if "b_nwnd" is 0). The text for
- * the buffer is kept in a circularly linked list of lines, with
- * a pointer to the header line in "b_linep".
- */
- typedef struct BUFFER {
- struct BUFFER *b_bufp; /* Link to next BUFFER */
- struct LINE *b_dotp; /* Link to "." LINE structure */
- short b_doto; /* Offset of "." in above LINE */
- struct LINE *b_markp; /* The same as the above two, */
- short b_marko; /* but for the "mark" */
- struct LINE *b_linep; /* Link to the header LINE */
- char b_nwnd; /* Count of windows on buffer */
- char b_flag; /* Flags */
- char b_bmode; /* This buffer's current modes */
- char b_fname[NFILEN]; /* File name */
- char b_bname[NBUFN]; /* Buffer name */
- } BUFFER;
-
- #define BFTEMP 0x01 /* Internal temporary buffer */
- #define BFCHG 0x02 /* Changed since last write */
- #define BMNWRAP 0x0001 /* Buffer is in No-Wrap mode */
- #define BMWRAP 0x0002 /* Buffer is in Wrap mode */
- #define BMCMODE 0x0004 /* Buffer is in C-Mode */
- #define NUMMODES 3
-
- /*
- * The starting position of a
- * region, and the size of the region in
- * characters, is kept in a region structure.
- * Used by the region commands.
- */
- typedef struct {
- struct LINE *r_linep; /* Origin LINE address. */
- short r_offset; /* Origin LINE offset. */
- short r_size; /* Length in characters. */
- } REGION;
-
- /*
- * All text is kept in circularly linked
- * lists of "LINE" structures. These begin at the
- * header line (which is the blank line beyond the
- * end of the buffer). This line is pointed to by
- * the "BUFFER". Each line contains a the number of
- * bytes in the line (the "used" size), the size
- * of the text array, and the text. The end of line
- * is not stored as a byte; it's implied. Future
- * additions will include update hints, and a
- * list of marks into the line.
- */
- typedef struct LINE {
- struct LINE *l_fp; /* Link to the next line */
- struct LINE *l_bp; /* Link to the previous line */
- short l_size; /* Allocated size */
- short l_used; /* Used size */
- char l_text[]; /* A bunch of characters. */
- } LINE;
-
- #define lforw(lp) ((lp)->l_fp)
- #define lback(lp) ((lp)->l_bp)
- #define lgetc(lp, n) ((lp)->l_text[(n)]&0xFF)
- #define lputc(lp, n, c) ((lp)->l_text[(n)]=(c))
- #define llength(lp) ((lp)->l_used)
-
- /*
- * The editor communicates with the display
- * using a high level interface. A "TERM" structure
- * holds useful variables, and indirect pointers to
- * routines that do useful operations. The low level get
- * and put routines are here too. This lets a terminal,
- * in addition to having non standard commands, have
- * funny get and put character code too. The calls
- * might get changed to "termp->t_field" style in
- * the future, to make it possible to run more than
- * one terminal type.
- */
- typedef struct {
- short t_nrow; /* Number of rows. */
- short t_ncol; /* Number of columns. */
- short t_margin; /* Min marg for extended lines */
- short t_scrsiz; /* Size of scroll reg. " " */
- int (*t_open)(); /* Open terminal at the start. */
- int (*t_close)(); /* Close terminal at end. */
- int (*t_getchar)(); /* Get character from keyboard. */
- int (*t_putchar)(); /* Put character to display. */
- int (*t_flush)(); /* Flush output buffers. */
- int (*t_move)(); /* Move the cursor, origin 0. */
- int (*t_eeol)(); /* Erase to end of line. */
- int (*t_eeop)(); /* Erase to end of page. */
- int (*t_beep)(); /* Beep. */
- int (*t_rev)(); /* Set reverse video state */
- } TERM;
-
- extern int fillcol; /* Fill column */
- extern int indcol; /* Indent column */
- extern int pagelen; /* Page size for print/paginate */
- extern int currow; /* Cursor row */
- extern int curcol; /* Cursor column */
- extern int thisflag; /* Flags, this command */
- extern int lastflag; /* Flags, last command */
- extern int curgoal; /* Goal for C-P, C-N */
- extern int mpresf; /* Stuff in message line */
- extern int sgarbf; /* State of screen unknown */
- extern int glmode; /* Global mode value */
- extern WINDOW *curwp; /* Current window */
- extern BUFFER *curbp; /* Current buffer */
- extern WINDOW *wheadp; /* Head of list of windows */
- extern BUFFER *bheadp; /* Head of list of buffers */
- extern BUFFER *blistp; /* Buffer for C-X C-B */
- extern BUFFER *bmacrp; /* Buffer for compiled macros */
- extern short kbdm[]; /* Holds keyboard macro data */
- extern short *kbdmip; /* Input pointer for above */
- extern short *kbdmop; /* Output pointer for above */
- extern char pat[]; /* Search pattern */
- extern char rpat[]; /* Replacement pattern */
- extern char prnhdr[]; /* Print header */
- extern char prndate[]; /* Print date */
- extern char lastbuf[]; /* Saved name of last used buf */
- extern char fillprefix[]; /* String to append filled lines*/
- extern char *modes[]; /* The mode names */
- extern TERM term; /* Terminal information. */
-
- extern BUFFER *bfind(); /* Lookup a buffer by name */
- extern WINDOW *wpopup(); /* Pop up window creation */
- extern LINE *lalloc(); /* Allocate a line */
-
- #if ALCYON /* CPM-68K Alcyon C compiler */
- extern char *malloc();
- extern FILE *fopen();
- extern char *strcpy(), *strncpy(), *alias();
- #endif
- #if ST
- extern long gemdos();
- extern int scancode; /* most recent key scancode */
- extern int shiftstat; /* most recent status of shift */
- #endif
-